﻿using BP.Difference;
using BP.Sys;
using BP.Web;
using System;
using System.Collections;

namespace BP.DA
{ 
    public class SQLManager
    {
        /// <summary>
        /// 执行标记的入口.
        /// 个性化的需求，需要在这里定义一个空间，做一个开始判断，执行个数据。
        /// </summary>
        /// <param name="mark"></param>
        /// <param name="ht"></param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public static string GenerSQLByMark(string mark, Hashtable ht = null)
        {
            #region 处理参数.
            int idx = mark.IndexOf("@");
            if (idx != -1)
            {
                string paras = mark.Substring(idx);
                paras = paras.Replace("@key", "@Key");

                mark = mark.Substring(0, idx);
                AtPara ap = new AtPara(paras);

                foreach (string key in ap.HisHT.Keys)
                {
                    if (ht.ContainsKey(key) == true)
                        continue;
                    ht.Add(key, ap.HisHT[key]);
                }
            }
            #endregion 处理参数.

            #region 根据标记命名空间，执行相关的方法.
            if (mark.StartsWith("Port_") == true)
                return SQLPort.Gener_Port(mark, ht);

            if (mark.StartsWith("Flow_") == true)
                return SQLFlow.Gener_Flow(mark, ht);

            if (mark.StartsWith("Frm_") == true)
                return SQLFrm.Gener_Frm(mark, ht);

            if (mark.StartsWith("DBSrc_") == true)
                return SQLDBSrc.Gener_DBSrc(mark, ht);

            //应用系统标记：期望而开用户把SQL标记都写如这个方法里面单独保管，不要提交.
            if (mark.StartsWith("App_") == true)
                return BP.Demo.SQLApp.Gener_App(mark, ht);

            //为demo 单独做一个命名空间.
            if (mark.StartsWith("DemoStudent_") == true)
                return BP.Demo.SQLDemo.DemoSQL(mark, ht); //获得demo的数据.

            #endregion 根据标记命名空间，执行相关的方法.

            throw new Exception("没有判断的标记:" + mark);
        }

    }
}
